﻿// 1100. 抓住那头牛.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <queue>
#include <map>

using namespace std;

/*
https://www.acwing.com/problem/content/1102/

农夫知道一头牛的位置，想要抓住它。

农夫和牛都位于数轴上，农夫起始位于点 N，牛位于点 K。

农夫有两种移动方式：

从 X 移动到 X−1 或 X+1，每次移动花费一分钟
从 X 移动到 2∗X，每次移动花费一分钟
假设牛没有意识到农夫的行动，站在原地不动。

农夫最少要花多少时间才能抓住牛？

输入格式
共一行，包含两个整数N和K。

输出格式
输出一个整数，表示抓到牛所花费的最少时间。

数据范围
0≤N,K≤105
输入样例：
5 17
输出样例：
4
*/


int n, k;


int main()
{
	cin >> n >> k;

	queue<int> q;
	q.push(n);
	map<int, int> mm; mm[n] = 1;
	while (!q.empty()) {
		int curr = q.front(); q.pop();
		int step = mm[curr];

		if (curr == k) {
			cout << step << endl; return 0;
		}

		int a = curr * 2;
		int b = curr - 1;
		int c = curr + 1;
		if (a < 2 * k && mm.count(a)==0) {
			q.push(a); mm[a] = step + 1;;
		}
		if (b >= 0 && mm.count(b) == 0) {
			q.push(b); mm[b] = step + 1;;
		}
		if (c >= 0 && c < 2 * k && mm.count(c) == 0) {
			q.push(c); mm[c] = step + 1;;
		}
	}
}

